30天什麼時候到.....
到目前為止,我們所介紹的CWin類別之物件,其資料成員均是在物件建立之後,才由成員函數來設定。很特別的是,C++也可以在建立物件的同時,一併設定他的資料,其方法是利用我們現在要介紹的建構元(constructor)。
在C++裡,建構元所扮演的主要角色是幫助新建立的物件設定初值。建構元可視為一種特殊的函數,它的定義方式與一般的函數類似,其語法如下:
類別名稱(型態1 引數1, 型態2 引數2,...)
{
程式敘述;
....
}
建構元的名稱必須與其所屬之類別名稱完全相同。例如,若要撰寫一個屬於CWin類別的建構元,則建構元名稱也必須是CWin。此外,建構元不能有傳回值,這點也與一般函數不同。
建構元除了沒有傳回值,且名稱必須與類別相同之外,他的呼叫時機也與一般的函數不同。一般的函數是在需要用到時才呼叫,而建構元則是在建立物件時便會自動呼叫,並執行建構元的內容,因此建構元不須從程式直接呼叫。
因此我們可利用建構元的特性,對物件的資料成員做「初始化」(initialization)的動作。所謂的「初始化」就是設定物件初值的意思。下面的例子說明建構元的使用方式:
//prog13_1,建構元的使用
#include <iostream>
#include <cstdlib>
using namespace std;
class CWin{ //定義視窗類別CWin
private:
char id;
int width, height;
public:
CWin(char i,int w,int h){ //CWin()建構元,可接收三個引數
id=i;
width=w;
height=h;
cout << "CWin 建構元被呼叫了..." << endl;
}
void show_member(void){ //成員函數,用來顯示資料成員的值
cout << "Window " << id << ": ";
cout << "width=" << width << ", height=" << height << endl;
}
};
int main(void){
CWin win1('A',50,40); //宣告win1物件,並設定初值
CWin win2('B',60,70); //宣告win2物件,並設定初值
win1.show_member();
win2.show_member();
system("pause");
return 0;
}
程式的結果如下:
稍早我們提到,建構元所扮演的主要角色,是幫助新建立的物件設定初值。由本例我們可以看出,在建立物件的同時,便可設定其資料成員的值。因此適當的使用建構元,可有效的化簡程式碼,並增進執行的效率喔!
今天就先到這邊~謝謝大家!